/**
 * 
 */
package fbv.distribuidora.pedido.negocio;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Hashtable;
import java.util.Map;

import fbv.commun.dataTools.negocio.EntidadeDAO;
import fbv.commun.dataTools.servico.EntidadePadrao;
import fbv.commun.excecoes.FBVException;
import fbv.commun.excecoes.FBVSQLException;
import fbv.commun.util.Util;
import fbv.distribuidora.cliente.negocio.ClienteDAO;
import fbv.distribuidora.cliente.servico.Cliente;
import fbv.distribuidora.pedido.servico.Pedido;

/**
 * @author Lenildo
 *
 */
public class PedidoDAO extends EntidadeDAO {

	private static final String TABLE_NAME = "PED_PEDIDO";
	private static final String TABLE_COLL_CHAVE_PRIMARIA = "PED_ID";
	private static final String TABLE_COLL_CLIENTE = "CLI_CLIENTE_CLI_ID";
	private static final String TABLE_COLL_DATA_PEDIDO = "PED_DATA_PEDIDO";

	private static PedidoDAO instancia;

	static {
		instancia = new PedidoDAO();
	}

	/**
	 * 
	 */
	private PedidoDAO(){

	}

	/* (non-Javadoc)
	 * @see fbv.commun.dataTools.negocio.EntidadeDAO#criarEntidade()
	 */
	@Override
	public EntidadePadrao criarEntidade() {
		return new PedidoImpl();
	}

	/* (non-Javadoc)
	 * @see fbv.commun.dataTools.negocio.EntidadeDAO#criarEntidade(java.sql.ResultSet, boolean)
	 */
	@Override
	protected EntidadePadrao criarEntidade(ResultSet resultSet, boolean completa) throws FBVException {
		Pedido pedido = new PedidoImpl();

		try{
			pedido.setId(resultSet.getInt(PedidoDAO.TABLE_COLL_CHAVE_PRIMARIA));
			pedido.setCliente((Cliente)ClienteDAO.getInstancia().selecionar(resultSet.getInt(PedidoDAO.TABLE_COLL_CLIENTE), true));
			pedido.setDataPedido(resultSet.getDate(PedidoDAO.TABLE_COLL_DATA_PEDIDO));
			//TODO [lenildo.mn] pedido.setItens(itens)
		}
		catch (SQLException e) {
			throw new FBVSQLException(e);
		}

		return pedido;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see fbv.commun.dataTools.negocio.EntidadeDAO#getInstancia()
	 */
	public static EntidadeDAO getInstancia() {
		return instancia;
	}

	/* (non-Javadoc)
	 * @see fbv.commun.dataTools.negocio.EntidadeDAO#getNomeCampoChave()
	 */
	@Override
	protected String getNomeCampoChave() {
		return TABLE_COLL_CHAVE_PRIMARIA;
	}

	/* (non-Javadoc)
	 * @see fbv.commun.dataTools.negocio.EntidadeDAO#getTableName()
	 */
	@Override
	protected String getTableName() {
		return TABLE_NAME;
	}

	/* (non-Javadoc)
	 * @see fbv.commun.dataTools.negocio.EntidadeDAO#obterParametrosSQL(fbv.commun.dataTools.servico.EntidadePadrao)
	 */
	@Override
	protected Map obterParametrosSQL(EntidadePadrao entidadePadrao) {
		Pedido pedido = (Pedido)entidadePadrao;
		Map parametros = new Hashtable();
		if (Util.isCampoPreenchido(pedido.getId())) {
			parametros.put(TABLE_COLL_CHAVE_PRIMARIA, pedido.getId());
		}
		parametros.put(TABLE_COLL_CLIENTE, pedido.getCliente().getId());
		parametros.put(TABLE_COLL_DATA_PEDIDO, pedido.getDataPedido());
		//TODO Produtos pedido.
		return parametros;
	}

}
